/*************************************************************************************
 *
 *	模块名称 : 线程邮箱
 *	文件名称 : 03_main.c
 *	版   本 : V1.0
 *	说   明 : 实现线程之间的数据共享
 *	修改记录 :
 *		     版本号       日期         作者        说明
 *	         V1.0     2023-04-1２      rush_long        发布
 *
 *	
 *
 *************************************************************************************/

#include "03_mail_box.h"

/***************************************************************
 *函数名: data_collect_th
 *功  能: 采集数据
 *参  数: 
 * 		需要传入线程的参数
 *返回值: 
 * 		返回NULL
 *注意事项:
 *		无
 ***************************************************************/
void *data_collect_th(void *arg)
{
    while(1)
    {
        sleep(3);												//模拟采集数据
        send_msg(mbs, "show", "aabb");
        send_msg(mbs, "show", "ccddee");
		send_msg(mbs, "show", "nihao");
		send_msg(mbs, "sock", "1122");
		send_msg(mbs, "sock", "3344");
		send_msg(mbs, "sock", "88182172");
	}

	return NULL;
}

/***************************************************************
 *函数名: show_th
 *功  能: 显示数据
 *参  数: 
 * 		需要传入线程的参数
 *返回值: 
 * 		返回NULL
 *注意事项:
 *		无
 ***************************************************************/
void* show_th(void* arg)
{
    while(1)
    {
        char sendname[256];										//显示数据
        DATATYPE data;
        recv_msg(mbs, sendname, data);
        printf("show recv msg from %s msg is %s\n", sendname, data);
        sleep(1);
    }

    return NULL;
}

/***************************************************************
 *函数名: sock_th
 *功  能: 上传数据
 *参  数: 
 * 		需要传入线程的参数
 *返回值: 
 * 		返回NULL
 *注意事项:
 *		无
 ***************************************************************/
void* sock_th(void* arg)
{
    while (1)													//模拟网络发送数据
    {
        DATATYPE data;
        char sendname[256];
        recv_msg(mbs,sendname, data);
        send_msg(mbs, "show", "my is sock");
        printf("scok recv msg from %s msg is %s\n", sendname, data);
        sleep(1);
    }

    return NULL;
}

int main()
{
    mbs = create_mail_box_system();						//创建线程邮箱

    register_to_mail_system(mbs, "show", show_th);       //注册线程邮箱
    register_to_mail_system(mbs, "sock", sock_th);
    register_to_mail_system(mbs, "data", data_collect_th);


    wait_all_end(mbs);				//等待线程邮箱中的线程结束
    destroy_mail_box_system(mbs);	//销毁线程邮箱

    return 0;
}
